import Router from '@koa/router'
import multer from '@koa/multer'
import fs from 'fs'
import { 
  uploadAndProcessFiles, 
  downloadFile, 
  queryDffTemplateController, 
  generateCsvController, 
  clearAllFilesController,
  updateDffController,
  queryOrderStatusController,
  callTrfApiController,
  checkTrfCacheController,
  getTrfCacheStatsController,
  cleanTrfCacheController,
  clearAllTrfCacheController,
  getAllCacheStatsController,
  cleanCacheByTypeController,
  clearAllCacheController,
  getCacheDetailsController,
  trfToGpoController,
  checkFileExistsController,
  searchProcessedRecordsController,
  deleteProcessedRecordController,
  clearAllProcessedRecordsController
} from '../controllers/file.js'
import { optionalJwtAuth, jwtAuth, requireAdmin } from '../middleware/auth.js'

const router = new Router()

// 确保临时目录存在（磁盘存储时使用）；改为内存存储以降低并发写入风险
try {
  if (!fs.existsSync('temp')) {
    fs.mkdirSync('temp', { recursive: true })
  }
} catch {}

const storage = multer.memoryStorage()
const upload = multer({
  storage,
  limits: {
    fileSize: 50 * 1024 * 1024, // 50MB限制
    files: 10 // 最多10个文件
  }
})

// 文件上传和处理路由 - 使用可选认证中间件（普通用户可访问）
router.post('/upload', optionalJwtAuth, upload.array('files', 10), uploadAndProcessFiles)

// 文件下载路由（普通用户可访问）
router.get('/download/:filename', downloadFile)

// DFF模板查询路由（普通用户可访问）
router.post('/query-dff-template', optionalJwtAuth, queryDffTemplateController)

// CSV生成路由（普通用户可访问）
router.post('/generate-csv', optionalJwtAuth, generateCsvController)

// 清理所有文件（普通用户可访问）
router.delete('/clear-all', optionalJwtAuth, clearAllFilesController)

// DFF更新API - 需要管理员权限
router.post('/update-dff', jwtAuth, requireAdmin, updateDffController)

// 订单/询价状态查询 - 需要管理员权限
router.post('/order-status', jwtAuth, requireAdmin, queryOrderStatusController)

// TRF API调用路由 - 所有登录用户都可以使用
router.post('/call-trf-api', jwtAuth, callTrfApiController)

// TRF to GPO路由 - 所有登录用户都可以使用
router.post('/trf-to-gpo', jwtAuth, trfToGpoController)

// 检查文件是否已处理
router.post('/check-file', jwtAuth, checkFileExistsController)

// 处理记录搜索（通过fileKey或关键词） - 需要管理员权限
router.get('/processed/search', jwtAuth, requireAdmin, searchProcessedRecordsController)

// 清空所有处理记录 - 需要管理员权限（必须放在 :fileId 之前，避免路由被吞）
router.delete('/processed/clear-all', jwtAuth, requireAdmin, clearAllProcessedRecordsController)
// 删除单条处理记录（按fileId） - 需要管理员权限
router.delete('/processed/:fileId', jwtAuth, requireAdmin, deleteProcessedRecordController)

// TRF结果缓存检查路由 - 所有登录用户都可以使用
router.post('/check-trf-cache', jwtAuth, checkTrfCacheController)

// TRF缓存管理路由 - 需要管理员权限
router.get('/trf-cache/stats', jwtAuth, requireAdmin, getTrfCacheStatsController)
router.post('/trf-cache/clean', jwtAuth, requireAdmin, cleanTrfCacheController)
router.delete('/trf-cache/clear-all', jwtAuth, requireAdmin, clearAllTrfCacheController)

// 通用缓存管理路由 - 需要管理员权限
router.get('/cache/stats', jwtAuth, requireAdmin, getAllCacheStatsController)
router.post('/cache/clean', jwtAuth, requireAdmin, cleanCacheByTypeController)
router.delete('/cache/clear-all', jwtAuth, requireAdmin, clearAllCacheController)
router.get('/cache/details/:cacheType', jwtAuth, requireAdmin, getCacheDetailsController)

export default router